home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 095 / rbbs_src.arc / CNFG-SUB.BAS < prev    next >
BASIC Source File  |  1987-06-07  |  65KB  |  1,522 lines

  1. ' $linesize:132
  2. ' $title: 'CNFG-SUB.BAS CPC15-1B, Copyright 1987 by D. Thomas Mack'
  3. '  Copyright 1987 by D. Thomas Mack, all rights reserved.
  4. '  Name ...............: CNFG-SUB.BAS
  5. '  Written by .........: D. Thomas Mack
  6. '  First Released .....: March 15, 1987
  7. '  Subsequent Releases.: June 7, 1987
  8. '  Copyright ..........: 1987
  9. '  Purpose.............: The Remote Bulletin Board System for the IBM PC,
  10. '                        RBBS-PC, configuration program -- CONFIG.BAS
  11. '                        utilizes a lot of menus and string space.
  12. '                        These are incorporated within CNFG-SUB.BAS as a
  13. '                        seperately callable subroutines in order to free
  14. '                        up as much code as possible within the 64K code
  15. '                        segment used by CONFIG.BAS.
  16. '  Parameters..........: Most parameters are passed via a COMMON statement.
  17. '
  18. ' Subroutine  Line      Function of Subroutine
  19. '    Name    Number
  20. ' ALLCAPS    61212+     Captialize a string
  21. ' ANYINTEGER 61450      Prompt for any integer
  22. ' ANYNUMBER  61400      Prompt for any number
  23. ' ASKRO      61000      Ask a question on a specific row
  24. ' ASKUPS     61300      Ask for identifying field in USERS record
  25. ' CHKFMSDIR  61700      Check FMS directory for valid structure
  26. ' CNFGINIT   60385      Initialize CONFIG's constants
  27. ' DISPLAY    12190      Display the CONFIG menu pages
  28. ' FINDFILE   61600      Determine whether a file exists
  29. ' GETNUMYN   61150      Get TRUE/FALSE answer to a YES/NO question
  30. ' GETYESNO   61200      Ask a question with a "yes" or "no" response
  31. ' MMINTEGER  61500      Prompt for integer with min and a max
  32. ' REMOVE     61800      Remove characters from a string
  33. '
  34. '  $INCLUDE: 'CNFG-VAR.BAS'
  35. '
  36. '  $SUBTITLE: 'DISPLAY - subroutine to display CONFIG's menus'
  37. '  $PAGE
  38. '
  39. '  SUBROUTINE NAME    --  DISPLAY
  40. '
  41. '  INPUT PARAMETERS   --  PARAMETER        DESCRIPTION
  42. '                         IX = 0           DISPLAY THE CHOICE OF MENUS
  43. '                         IX = -1          RE-READ THE INPUT (INVALID REQUEST)
  44. '                         IX > 0           DISPLAY THE APPROPRIATE PAGE
  45. '
  46. '  OUTPUT PARAMETERS  --  HJ$              OPTION SELECTED
  47. '                         IPAGE            MENU PAGE CONTAINING OPTION
  48. '                         ILOOKUP          INDEX (1 TO 20) OF OPTION SELECTED
  49. '
  50. '  SUBROUTINE PURPOSE --  TO DISPLAY CONFIG'S MENUS AND REQUEST OPTION
  51. '
  52.       SUB DISPLAY STATIC
  53. '
  54. ' *****************************************************************************
  55. ' *  DISPLAY CONFIG'S MAIN FUNCTION KEY MENU                                  *
  56. ' *****************************************************************************
  57. '
  58.       IF IX > 0 THEN _
  59.          GOTO 12320
  60.       IF IX = -1 THEN _
  61.          GOTO 12590
  62. 12190 COLOR FG,BG,BORDER
  63.       CLS
  64.       DISPLAYED.PAGE.NUMBER = 0
  65.       I! = FRE(C$)
  66.       COLOR 0,7,0
  67.       LOCATE 4,10
  68.       PRINT "RBBS-PC CPC15.1 CONFIGURATION PROGRAM " + CONFIG.VERSION$
  69.       COLOR FG,BG,BORDER
  70.       LOCATE 1,1,0
  71.       PRINT "Copyright (c) 1983-1987 Tom Mack"
  72.       LOCATE 2,1,0
  73.       PRINT "10210 Oxfordshire Rd., Great Falls, VA 22066";
  74.       IF F THEN _
  75.          GOSUB 24970
  76.       LOCATE  5,2
  77.       PRINT "   F1            Global RBBS-PC Parameters (part 1)
  78.       LOCATE  6,2
  79.       PRINT "   F2            Global RBBS-PC Parameters (part 2)
  80.       LOCATE  7,2
  81.       PRINT "   F3            Global RBBS-PC Parameters (part 3)
  82.       LOCATE  8,2
  83.       PRINT "   F4            Parameters for static RBBS-PC Files
  84.       LOCATE  9,2
  85.       PRINT "   F5            Parameters for dynamic RBBS-PC's Files
  86.       LOCATE 10,2
  87.       PRINT "   F6            Parameters for RBBS-PC's 'Doors'
  88.       LOCATE 11,2
  89.       PRINT "   F7            Parameters for RBBS-PC's Security
  90.       LOCATE 12,2
  91.       PRINT "   F8            Parameters for multiple RBBS-PC's
  92.       LOCATE 13,2
  93.       PRINT "   F9            RBBS-PC utilities
  94.       LOCATE 14,2
  95.       PRINT "  F10            RBBS-PC File Management Faciliites"
  96.       LOCATE 15,2
  97.       PRINT "  Shift-F1       RBBS-PC Communications Parameters"
  98.       LOCATE 16,2
  99.       PRINT "  Shift-F2       Parameters for RBBS-PC NET-MAIL
  100.       LOCATE 17,2
  101.       PRINT "  Shift-F3       New users parameters"
  102.       LOCATE 18,2
  103.       PRINT "  Shift-F4       Reserved for future use"
  104.       LOCATE 19,2
  105.       PRINT "  Shift-F5       Reserved for future use"
  106.       LOCATE 20,2
  107.       PRINT "  Shift-F6       Reserved for future use"
  108.       LOCATE 21,2
  109.       PRINT "  Shift-F7       Reserved for future use"
  110.       LOCATE 22,2
  111.       PRINT "  Shift-F8       Reserved for future use"
  112.       XX$ = "Press END to terminate or Function Key to select page for parameters shown "
  113.       GOSUB 50345
  114.       LOCATE ,,1
  115. 12310 GOSUB 22160
  116. 12320 IF IX THEN _            'IX       Key    Where to branch to
  117.          ON IX GOTO 12360, _  ' 1        F1 - Global Parameters (Part 1)
  118.                     12370, _  ' 2        F2 - Global Parameters (Part 2)
  119.                     12380, _  ' 3        F3 - Global Parameters (Part 3)
  120.                     12390, _  ' 4        F4 - Static RBBS-PC Files
  121.                     12400, _  ' 5        F5 - Dynamic RBBS-PC Files
  122.                     12410, _  ' 6        F6 - RBBS-PC "doors"
  123.                     12420, _  ' 7        F7 - RBBS-PC security parameters
  124.                     12470, _  ' 8        F8 - Multiple RBBS-PC parameters
  125.                     12480, _  ' 9        F9 - RBBS-PC's utilities
  126.                     12490, _  '10       F10 - RBBS-PC File Manager
  127.                     12500, _  '11  Shift-F1 - RBBS-PC communications parameters
  128.                     12510, _  '12  Shift-F2 - RBBS-PC Net Mail
  129.                     12520, _  '13  Shift-F3 - New user parameters
  130.                     12310, _  '14  Shift-F4 - Reserved for future use
  131.                     12310, _  '15  Shift-F5 - Reserved for future use
  132.                     12310, _  '16  Shift-F6 - Reserved for future use
  133.                     12310, _  '17  Shift-F7 - Reserved for future use
  134.                     12310, _  '18  Shift-F8 - Reserved for future use
  135.                     12340, _  '19      PgUp - Go to previous page
  136.                     12330, _  '20      PgDn - Go to next page
  137.                     12630, _  '21       End - Terminate CONFIG
  138.                     12350     '22     Enter - Re-display current page
  139.       GOTO 12310
  140. '
  141. ' *****************************************************************************
  142. ' *  COMMON ROUTINE TO HANDLE UNDEFINED OPTIONS                               *
  143. ' *****************************************************************************
  144. '
  145. 12325 IX = IPAGE
  146.       GOTO 12320
  147. '
  148. ' *****************************************************************************
  149. ' *  COMMON ROUTINE TO HANDLE PAGE UP OF DISPLAYS                             *
  150. ' *****************************************************************************
  151. '
  152. 12330 IF (DISPLAYED.PAGE.NUMBER + 1 ) > 13 THEN _
  153.          GOTO 12190
  154.       IX = DISPLAYED.PAGE.NUMBER + 1
  155.       GOTO 12320
  156. '
  157. ' *****************************************************************************
  158. ' *  COMMON ROUTINE TO HANDLE PAGE DOWN OF DISPLAYS                           *
  159. ' *****************************************************************************
  160. '
  161. 12340 IF (DISPLAYED.PAGE.NUMBER - 1) < 1 THEN _
  162.          GOTO 12190
  163.       IX = DISPLAYED.PAGE.NUMBER - 1
  164.       GOTO 12320
  165. '
  166. ' *****************************************************************************
  167. ' *  RETURN TO PRIMARY MENU SELECTION DISPLAY                                 *
  168. ' *****************************************************************************
  169. '
  170. 12350 GOSUB 60380
  171.       GOTO 12310
  172. '
  173. ' *****************************************************************************
  174. ' *  COMMON CONFIGURATION PROGRAM MENU AND PAGE DISPLAY                       *
  175. ' *****************************************************************************
  176. '
  177. 12360 DISPLAYED.PAGE.NUMBER = 1
  178.       GOSUB 24800
  179.       LOCATE  3,10
  180.       PRINT " 1. SYSOP's First Name --------------------------- " + SYSOP.FIRST.NAME$
  181.       LOCATE  4,10
  182.       PRINT " 2. SYSOP's Last Name ---------------------------- " + SYSOP.LAST.NAME$
  183.       LOCATE  5,10
  184.       PRINT " 3. Password #1 for SYSOP to sign on remotely ---- " + MN1$
  185.       LOCATE  6,10
  186.       PRINT " 4. Password #2 for SYSOP to sign on remotely----- " + MN2$
  187.       LOCATE  7,10
  188.       PRINT " 5. Password for SYSOP to sign on locally -------- " + LOCAL.PASSWORD$
  189.       LOCATE  8,10
  190.       PRINT " 6. SYSOP's default sign-on mode ----------------- " + EXPERT.USER$
  191.       LOCATE  9,10
  192.       PRINT " 7. SYSOP's office hours -------------------------"STR$(START.OFFICE.HOURS);" to"STR$(END.OFFICE.HOURS)
  193.       LOCATE 10,10
  194.       PRINT " 8. Page SYSOP using printer's bell -------------- " + M11$
  195.       LOCATE 11,10
  196.       PRINT " 9. Deny access to callers who use 300 baud ------ " + RESTRICT.BAUD$
  197.       LOCATE 12,10
  198.       PRINT "10. Are you using ANSI.SYS with a color monitor -- " + USE.COLOR$
  199.       LOCATE 13,10
  200.       PRINT "11. Go off-line whenever a DISK FULL occurs ------ " + DISKFULL.GO.OFFLINE$
  201.       LOCATE 14,10
  202.       PRINT "12. Prompt bell default is ----------------------- " + PROMPT.BELL$
  203.       LOCATE 15,10
  204.       PRINT "13. Maximum time per session (in minutes) --------"STR$(MINUTES.PER.SESSION!)
  205.       LOCATE 16,10
  206.       PRINT "14. Limit each user to" + STR$(MINUTES.PER.SESSION!) + " minutes/day? " + STRING$((14-LEN(STR$(MINUTES.PER.SESSION!))),45) + " " + LIMIT.DAILY.TIME$
  207.       LOCATE 17,10
  208.       PRINT "15. # Months of inactivity before user deleted ---"STR$(ACT.MNTHS.B4.DELETING)
  209.       LOCATE 18,10
  210.       PRINT "16. Name of RBBS-PC shown initially is ----------- " + RBBS.NAME$
  211.       LOCATE 19,10
  212.       PRINT "17. Foreground color (for color monitors) is -----"STR$(FG)
  213.       LOCATE 20,10
  214.       PRINT "18. Background color (for color monitors) is -----"STR$(BG)
  215.       LOCATE 21,10
  216.       PRINT "19. The border color (for color monitors) is -----"STR$(BORDER)
  217.       LOCATE 22,10
  218.       PRINT "20. Users that can elect to bypass messages ------ " + NOT.YET.IN$ ' SL.TO.BYPASS.MSGS
  219.       GOTO 12580
  220. 12370 DISPLAYED.PAGE.NUMBER = 2
  221.       GOSUB 24800
  222.       LOCATE  3,10
  223.       PRINT "21. Remind users of messages that they left ------ " + MESSAGE.REMINDER$
  224.       LOCATE  4,10
  225.       PRINT "22. Remind users of # uploads and downloads? ----- " + REMIND.FILE.TRANSFERS$
  226.       LOCATE  5,10
  227.       PRINT "23. Remind users of their terminal profile? ------ " + REMIND.PROFILE$
  228.       LOCATE  6,10
  229.       PRINT "24. Default user page length is ------------------" + STR$(PAGE.LENGTH)
  230.       LOCATE  7,10
  231.       PRINT "25. Maximum number of lines allowed per message --" + STR$(MAX.MESSAGE.LINES)
  232.       LOCATE  8,10
  233.       PRINT "26. Require non-ascii protocol for BASIC files --- " + REQUIRE.NON.ASCII$
  234.       LOCATE  9,10
  235.       PRINT "27. Factor to extend session time for uploads ----" + STR$(UPLOAD.TIME.FACTOR!)
  236.       LOCATE 10,10
  237.       PRINT "28. Name of required questionnaire --------------- " + REQUIRED.QUESTIONNAIRE$
  238.       LOCATE 11,10
  239.       PRINT "29. Is system 'welcome' interruptable? ----------- " + WELCOME.INTERRUPTABLE$
  240.       LOCATE 12,10
  241.       PRINT "30. Are system bulletins to be 'optional'? ------- " + BULLETINS.OPTIONAL$
  242.       LOCATE 13,10
  243.       PRINT "31. Type of PC RBBS-PC will be running on? ------- " + COMPUTER.TYPE$
  244.       LOCATE 14,10
  245.       PRINT "32. Symbols to use for SYSOP commands ------------ " + SYSOP.COMMANDS$
  246.       LOCATE 15,10
  247.       PRINT "33. Symbols to use for MAIN menu commands -------- " + MAIN.COMMANDS$
  248.       LOCATE 16,10
  249.       PRINT "34. Symbols to use for FILE menu commands -------- " + FILE.COMMANDS$
  250.       LOCATE 17,10
  251.       PRINT "35. Symbols to use for UTILITIES menu commands --- " + UTIL.COMMANDS$
  252.       LOCATE 18,10
  253.       PRINT "36. Symbols to use for global commands ----------- " + GLOBAL.COMMANDS$
  254.       LOCATE 19,10
  255.       PRINT "37. Show section in command prompt --------------- " + SHOW.SECTION$
  256.       LOCATE 20,10
  257.       PRINT "38. Show commands in command prompt -------------- " + COMMANDS.IN.PROMPT$
  258.       LOCATE 21,10
  259.       PRINT "39. Use machine language routines for speed ------ " + TURBO.RBBS$
  260.       LOCATE 22,10
  261.       PRINT "40. Restrict valid commands to current section --- " + FNYESNO$(RESTRICT.VALID.CMDS)
  262.       GOTO 12580
  263. 12380 DISPLAYED.PAGE.NUMBER = 3
  264.       GOSUB 24800
  265.       LOCATE  3,10
  266.       PRINT "41. Field used to identify users ----------------- " + HASH.ID$
  267.       LOCATE  4,10
  268.       PRINT "42. Field used to distinguish users with same ID-- " + INDIV.ID$
  269.       LOCATE  5, 10
  270.       PRINT "43. RESTRICT users by SUBSCRIPTION date ---------- " + RESTRICT.BY.DATE$
  271.       LOCATE  6,10
  272.       PRINT "44. Security level when SUBSCRIPTION expires -----"  + STR$(EXPIRED.SECURITY)
  273.       LOCATE  7,10
  274.       PRINT "45. Days before expiration to warn callers -------"  + STR$(DAYS.TO.WARN)
  275.       LOCATE  8,10
  276.       PRINT "46. Default # days in SUBSCRIPTION PERIOD --------"  + STR$(DAYS.IN.SUBSCRIPTION.PERIOD)
  277.       LOCATE  9,10
  278.       PRINT "47. Turn printer off after each recycle ---------- " + TURN.PRINTER.OFF$
  279.       LOCATE 10,10
  280.       PRINT "48. Play musical themes for RBBS functions ------- " + MUSIC$
  281.       LOCATE 11,10
  282.       PRINT "49. BUFFER SIZE used when displaying text files --" + STR$(BUFFER.SIZE)
  283.       LOCATE 12,10
  284.       PRINT "50. File shown users when SYSOP wants system next  " + NOT.YET.IN$ ' F7.MESSAGE$
  285.       LOCATE 13,10
  286.       PRINT "51. Call-back verification ----------------------- " + NOT.YET.IN$ ' CALLBACK.VERIFICATION$
  287.       LOCATE 14,10
  288.       PRINT "52. On a unrecoverable error --------------------- " + NOT.YET.IN$ ' HALT.ON.ERROR$
  289.       GOTO 12580
  290. 12390 DISPLAYED.PAGE.NUMBER = 4
  291.       GOSUB 24800
  292.       IF INSTR(DRIVE.FOR.BULLETINS$,":") < 1 THEN _
  293.          DRIVE.FOR.BULLETINS$ = DRIVE.FOR.BULLETINS$ + ":"
  294.       LOCATE  3,10
  295.       PRINT "61. Drive and file describing 'bulletins' is ----- " + DRIVE.FOR.BULLETINS$ + BULLETIN.MENU$
  296.       LOCATE  4,10
  297.       PRINT "62. Number of active 'bulletins' -----------------" + STR$(ACTIVE.BULLETINS)
  298.       LOCATE  5,10
  299.       PRINT "63. Prefix used to name bulletin files is -------- " + BULLETIN.PREFIX$
  300.       LOCATE  6,10
  301.       PRINT "64. Drive and path (optional) for 'help' files --- " + HELP.PATH$
  302.       LOCATE  7,10
  303.       PRINT "65. Prefix used to name four major 'help' files -- " + HELP.FILE.PREFIX$
  304.       LOCATE  8,10
  305.       PRINT "66. Extension for help files of individual cmds -- " + HELP.EXTENSION$
  306.       LOCATE  9,10
  307.       PRINT "67. HELP file when callers CATEGORIZE uploads ---- " + UPCAT.HELP$
  308.       LOCATE 10,10
  309.       PRINT "68. Name of 'newuser' file shown to new users ---- " + NEWUSER.FILE$
  310.       LOCATE 11,10
  311.       PRINT "69. Name of 'welcome' file shown at logon -------- " + WELCOME.FILE$
  312.       LOCATE 12,10
  313.       PRINT "70. The SYSOP's command menu is named ------------ " + MENU$(1)
  314.       LOCATE 13,10
  315.       PRINT "71. The MAIN system menu is named ---------------- " + MENU$(2)
  316.       LOCATE 14,10
  317.       PRINT "72. The file subsystem menu is named ------------- " + MENU$(3)
  318.       LOCATE 15,10
  319.       PRINT "73. The utilities subsystem menu is named -------- " + MENU$(4)
  320.       LOCATE 16,10
  321.       PRINT "74. Menu that lists available conferences is ----- " + CONFERENCE.MENU$
  322.       LOCATE 17,10
  323.       PRINT "75. Menu that lists questionnaires available is -- " + ANS.MENU$
  324.       LOCATE 18,10
  325.       PRINT "76. File containing invalid user names ----------- " + TRASHCAN.FILE$
  326.       GOTO 12580
  327. 12400 DISPLAYED.PAGE.NUMBER = 5
  328.       GOSUB 24800
  329.       LOCATE  3,10
  330.       PRINT "81. System file containing messages is named ----- " + MAIN.MESSAGE.FILE$
  331.       LOCATE  4,10
  332.       PRINT "82. System file for recording users is named ----- " + MAIN.USER.FILE$
  333.       LOCATE  5,10
  334.       PRINT "83. System file for comments to SYSOP is named --- " + COMMENTS.FILE$
  335.       LOCATE  6,10
  336.       PRINT "84. Record comments as private messages ---------- " + COMMENTS.AS.MESSAGES$
  337.       LOCATE  7,10
  338.       PRINT "85. System file for 'callers' is named ----------- " + CALLERS.FILE$
  339.       LOCATE  8,10
  340.       PRINT "86. Extended logging to 'callers' file ----------- " + EXTENDED.LOGGING$
  341.       LOCATE  9,10
  342.       PRINT "87. Wrap-around the 'callers' file --------------- " + NOT.YET.IN$ ' WRAP.CALLERS.FILE$
  343.       GOTO 12580
  344. 12410 DISPLAYED.PAGE.NUMBER = 6
  345.       GOSUB 24800
  346.       LOCATE  3,9
  347.       PRINT "101. Is the 'door' subystem available? ------------ " + DOORS.AVAILABLE$
  348.       LOCATE  4,9
  349.       PRINT "102. The 'door' subsystem menu is named ----------- " + MENU$(5)
  350.       LOCATE  5,9
  351.       PRINT "103. File RBBS builds dynamically to open a 'door'- " + RCTTY.BAT$
  352.       LOCATE  6,9
  353.       PRINT "104. When a 'door' closes, file to re-invoke RBBS - " + RBBS.BAT$
  354.       LOCATE  7,9
  355.       PRINT "105. Drive to look for COMMAND.COM on ------------- " + DISK.FOR.DOS$
  356.       LOCATE  8,9
  357.       PRINT "106. Use the Dos 'CTTY' command to redirect I/O --- " + REDIRECT.IO.METHOD$
  358.       LOCATE  9,9
  359.       PRINT "107. Invoke RBBS 'drivers' via ... ---------------- " + GO.TO.SHELL$
  360.       GOTO 12580
  361. 12420 DISPLAYED.PAGE.NUMBER = 7
  362.       GOSUB 24800
  363.       LOCATE  3,9
  364.       PRINT "121. Minimum security level to get onto RBBS -------" + STR$(MINIMUM.LOGON.SECURITY)
  365.       LOCATE  4,9
  366.       PRINT "122. Default security level for new callers --------" + STR$(DEFAULT.SECURITY.LEVEL)
  367.       LOCATE  5,9
  368.       PRINT "123. Security level for SYSOP ----------------------" + STR$(SYSOP.SECURITY.LEVEL)
  369.       LOCATE  6,9
  370.       PRINT "124. Files with download security are listed in ---- " + FILESEC.FILE$
  371.       LOCATE  7,9
  372.       PRINT "125. Minimum security level to see SYSOP's menu ----" + STR$(SYSOP.MENU.SECURITY.LEVEL)
  373.       LOCATE  8,9
  374.       PRINT "126. Minimum security level to use RBBS-PC 'doors'--" + STR$(DOORS.SECURITY.LEVEL)
  375.       LOCATE  9,9
  376.       PRINT "127. Max # security violations before disconnect ---" + STR$(MAXIMUM.VIOLATIONS)
  377.       M22$ = STR$(SF)
  378.       IX = SYSOP.FUNCTION(1)
  379.       FOR I = 2 TO NUM.SYSOP
  380.         IF IX <> SYSOP.FUNCTION(I) THEN _
  381.            M22$ = "(Variable)" : _
  382.            GOTO 12430                                                ' CPC15-1B
  383.       NEXT
  384. 12430 LOCATE 10,9
  385.       PRINT "128. Security level for SYSOP functions ------------" + M22$
  386.       M23$ = STR$(MM)
  387.       IX = MAIN.FUNCTION(1)
  388.       FOR I = 2 TO NUM.MAIN
  389.         IF IX<>MAIN.FUNCTION(I) THEN _
  390.            M23$ = "(Variable)" : _
  391.            GOTO 12440 
  392.       NEXT                                                           ' CPC15-1B
  393. 12440 LOCATE 11,9
  394.       PRINT "129. Security level for main menu functions --------" + M23$
  395.       M24$ = STR$(FC)
  396.       IX = FILES.FUNCTION(1)
  397.       FOR I = 2 TO NUM.FILES
  398.         IF IX<>FILES.FUNCTION(I) THEN _
  399.            M24$ = "(Variable)" : _
  400.            GOTO 12450                                                ' CPC15-1B
  401.       NEXT
  402. 12450 LOCATE 12,9
  403.       PRINT "130. Security level for file menu functions --------" + M24$
  404.       M25$ = STR$(UE)
  405.       IX = UTILITY.FUNCTION(1)
  406.       FOR I = 2 TO NUM.UTILITY
  407.         IF IX<>UTILITY.FUNCTION(I) THEN _
  408.            M25$ = "(Variable)" : _
  409.            GOTO 12460                                                ' CPC15-1B
  410.       NEXT
  411. 12460 LOCATE 13,9
  412.       PRINT "131. Security level for utilities menu functions ---" + M25$
  413.       M26$ = STR$(GB)
  414.       IX = GLOBAL.FUNCTION(1)
  415.       FOR I = 1 TO NUM.GLOBAL
  416.         IF IX<>GLOBAL.FUNCTION(I) THEN _
  417.            M26$ = "(Variable)" : _
  418.            GOTO 12465                                                ' CPC15-1B
  419.       NEXT
  420. 12465 LOCATE 14,9
  421.       PRINT "132. Security level for GLOBAL commands ------------" + M26$
  422.       LOCATE 15,9
  423.       PRINT "133. File with privileged group passwords is named-- "+ PASSWORD.FILE$
  424.       LOCATE 16,9
  425.       PRINT "134. Max # of password changes in a session --------" + STR$(MAXIMUM.PASSWORD.CHANGES)
  426.       LOCATE 17,9
  427.       PRINT "135. Min. security level for temp. password changes-" + STR$(MINIMUM.SECURITY.FOR.TEMP.PASSWORD)
  428.       LOCATE 18,9
  429.       PRINT "136. Min. security level to overwrite on uploads ---" + STR$(OVERWRITE.SECURITY.LEVEL)
  430.       LOCATE 19,9
  431.       PRINT "137. User's security exempted from 'packing' -------" + STR$(SEC.LVL.EXEMPT.FRM.PURGING)
  432.       LOCATE 20,9
  433.       PRINT "138. Security level assigned new public messages --- " + NOT.YET.IN$ ' STR$(NEW.PUBLIC.MSGS.SECURITY)
  434.       LOCATE 21,9
  435.       PRINT "139. Security level assigned new private messages -- " + NOT.YET.IN$ ' STR$(NEW.PRIVATE.MSGS.SECURITY)
  436.       LOCATE 22,9
  437.       PRINT "140. Security able to revise a message's security -- " + NOT.YET.IN$ ' STR$(SECURITY.NEEDED.TO.CHANGE.MSGS)
  438.       GOTO 12580
  439. 12470 DISPLAYED.PAGE.NUMBER = 8
  440.       GOSUB 30040
  441.       MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  442.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  443.       MAX.ALLOWED.MSGS.FRM.DEF  = MAXIMUM.NUMBER.OF.MSGS
  444.       GOSUB 24800
  445.       LOCATE  3,9
  446.       PRINT "141. Maximum number of concurrent RBBS-PC's  -------" + STR$(MAXIMUM.NUMBER.OF.NODES)
  447.       IF MAXIMUM.NUMBER.OF.NODES = 1 THEN _
  448.          MT$ = "single RBBS-PC copy " ELSE _
  449.          MT$ = "concurrent RBBS-PC's" : _
  450.          GOSUB 21900 : _
  451.          IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 5 THEN _              ' CPC15-1B
  452.             GOTO 21810
  453.       LOCATE  4,9
  454.       PRINT "142. Environment running " + MT$ + " ------ " + NETWORK.TYPE$
  455.       LOCATE  5,9
  456.       PRINT "143. RBBS-PC 'recycle' method when users log off --- " + RECYCLE.TO.DOS$
  457.       FILE$ = MAIN.MESSAGE.FILE$
  458.       GOSUB 30180
  459.       MAX.MSG.FILE.SIZE.FRM.DEF! = UG
  460.       LOCATE  6,9
  461.       PRINT "144. Number of records in the " + MAIN.USER.FILE$ + " file " + STRING$(16-LEN(MAIN.USER.FILE$),"-");STR$(MAX.USR.FILE.SIZE.FRM.DEF)
  462.       LOCATE  7,9
  463.       PRINT "145. Number of records in " + MAIN.MESSAGE.FILE$ + " file " + STRING$(20-LEN(MAIN.MESSAGE.FILE$),"-");STR$(MAX.MSG.FILE.SIZE.FRM.DEF!)
  464.       LOCATE  8,9
  465.       PRINT "146. Maximum number of messages allowed ------------" + STR$(MAX.ALLOWED.MSGS.FRM.DEF)
  466.       LOCATE  9,9
  467.       PRINT "147. Conference File Maintenance.
  468.       GOTO 12580
  469. 12480 DISPLAYED.PAGE.NUMBER = 9
  470.       GOSUB 24800
  471.       RB = 0
  472.       LOCATE  3,9
  473.       PRINT "161. Pack " + MAIN.MESSAGE.FILE$ + " file.
  474.       LOCATE  4,9
  475.       PRINT "162. Rebuild " + MAIN.USER.FILE$ + " file.
  476.       LOCATE  5,9
  477.       PRINT "163. Print " + MAIN.MESSAGE.FILE$ + " 'header' records.
  478.       LOCATE  6,9
  479.       PRINT "164. Renumber messages in " + MAIN.MESSAGE.FILE$ + " file.
  480.       LOCATE  7,9
  481.       PRINT "165. Repair messages in " + MAIN.MESSAGE.FILE$ + " file.
  482.       LOCATE  8,9
  483.       PRINT "166. Make all users answer required questionnaire."
  484.       LOCATE  9,9
  485.       PRINT "167. Check FMS directory structure."
  486.       GOTO 12580
  487. 12490 DISPLAYED.PAGE.NUMBER = 10
  488.       GOSUB 24800
  489.       LOCATE  3,9
  490.       PRINT "181. Drive available for Uploading ---------------- " + DRIVE.FOR.UPLOADS$
  491.       LOCATE  4,9
  492.       PRINT "182. Name of directory for uploading -------------- " + UPLOAD.DIRECTORY$
  493.       LOCATE  5,9
  494.       PRINT "183. Drive/path where Upload Directory stored ----- " + UPLOAD.PATH$
  495.       LOCATE  6,9
  496.       PRINT "184. Drive(s) available for Downloading ----------- " + DRIVES.FOR.DOWNLOADS$
  497.       LOCATE  7,9
  498.       PRINT "185. Will you be using DOS sub-directories? ------- " + WILL.SUBDIRS.B.USED$
  499.       LOCATE  8,9
  500.       PRINT "186. Write Uploads to a DOS sub-directory? -------- " + UPLOAD.TO.SUBDIR$
  501.       LOCATE  9,9
  502.       PRINT "187. Are downloads from DOS sub-directories? ------ " + DOWNLOAD.TO.SUBDIR$
  503.       LOCATE 10,9
  504.       PRINT "188. List, change, add, delete sub-directories."
  505.       LOCATE 11,9
  506.       PRINT "189. File directory ext. (name dir of directories)- " + DIRECTORY.EXTENTION$
  507.       LOCATE 12,9
  508.       PRINT "190. Omit directory of directories in N)ew command  " + OMIT.MAIN.DIRECTORY$
  509.       LOCATE 13,9
  510.       IF ALWAYS.STREW.TO$ = "" OR _
  511.          ALWAYS.STREW.TO$ = "NONE" THEN _
  512.          PRINT "191. Do not copy upload descriptions to another file." _
  513.       ELSE PRINT "191. Copy all upload descriptions to -------------- " + ALWAYS.STREW.TO$
  514.       LOCATE 14,9
  515.       A$ = FMS.DIRECTORY$
  516.       IF FMS.DIRECTORY$ = "" THEN _
  517.          A$ = "[FMS is not active]"
  518.       PRINT "192. Name of File Management System directory is -- " + A$
  519.       LOCATE 15,9
  520.       PRINT "193. Min SECURITY to CATEGORIZE uploads -----------" + STR$(SL.CATEGORIZE.UPLOADS)
  521.       LOCATE 16,9
  522.       PRINT "194. Limit file searches to FMS directory only ---- " + LIMIT.SEARCH.TO.FMS$
  523.       LOCATE 17,9
  524.       PRINT "195. Default category code for uploads ------------ " + DEFAULT.CATEGORY.CODE$
  525.       LOCATE 18,9
  526.       PRINT "196. File containing valid directory categories --- " + DIR.CATEGORY.FILE$
  527.       LOCATE 19,9
  528.       PRINT "197. Enable download of new files at logon -------- " + NEW.FILES.CHECK$
  529.       LOCATE 20,9
  530.       PRINT "198. Max length of description of uploaded file -- " + STR$(MAX.DESC.LEN)
  531.       LOCATE 21,9
  532.       PRINT "199. Min security level to view new uploads ------ " + STR$(MIN.SEC.TO.VIEW)
  533.       LOCATE 22,9
  534.       PRINT "200. Drive and path (optional) for directory files  " + DIRECTORY.PATH$
  535.       GOTO 12580
  536. 12500 DISPLAYED.PAGE.NUMBER = 11
  537.       GOSUB 24800
  538.       LOCATE 3,9
  539.       PRINT "201. Communications port to be used by RBBS-PC ---- " + COM.PORT$
  540.       LOCATE 4,9
  541.       PRINT "202. # of seconds to wait for modem to initialize -" + STR$(MODEM.INIT.WAIT.TIME)
  542.       LOCATE 5,9
  543.       PRINT "203. Seconds to wait before issuing modem commands-" + STR$(MODEM.COMMAND.DELAY.TIME)
  544.       LOCATE 6,9
  545.       PRINT "204. Number of rings to wait before answering -----" + STR$(REQUIRED.RINGS);
  546.       IF MID$(MODEM.INIT.COMMAND$,24,5) = "255  " THEN _
  547.          PRINT "RING BACK";
  548.       LOCATE 7,9
  549.       PRINT "205. Use the RBBS-PC default Hayes commands? ------ " + M14$
  550.       LOCATE 8,9
  551.       PRINT "206. Is MICROCOM's MNP protocol available? -------- " + MNP.SUPPORT$
  552.       LOCATE 9,9
  553.       PRINT "207. Issue modem commands between rings ----------- " + COMMANDS.BETWEEN.RINGS$
  554.       LOCATE 10,9
  555.       PRINT "208. Baud rate to initially open modem at --------- " + MODEM.INIT.BAUD$
  556.       LOCATE 11,9
  557.       PRINT "209. Seconds waited before logging off idle users -" + STR$(WAIT.BEFORE.DISCONNECT)
  558.       LOCATE 12,9
  559.       PRINT "210. Are you using a 'DUMB' auto-answer modem? ---- " + DUMB.MODEM$
  560.       LOCATE 13,9
  561.       PRINT "211. Initialize Hayes 2400 firmware for RBBS-PC."
  562.       LOCATE 14,9
  563.       PRINT "212. # seconds to wait after dropping DTR ---------"  + STR$(DTR.DROP.DELAY)
  564.       LOCATE 15,9
  565.       PRINT "213. Drive/path where EXTERNAL PROTOCOL pgms stored " + PROTOCOL.PATH$
  566.       LOCATE 16,9
  567.       PRINT "214. Use Xmodem in external protocol programs ----- " + FNYESNO$(USE.EXTERNAL.XMODEM)
  568.       LOCATE 17,9
  569.       PRINT "215. Always check caller for AUTODOWNLOAD support - " + FNYESNO$(ASK.IDENTITY)
  570.       LOCATE 18,9
  571.       IF MASTER.DIRECTORY.NAME$ = "" THEN _
  572.          PRINT "216. Limit search for 'ALL' to non-FMS directory -- <none>" _
  573.       ELSE PRINT "216. Limit search for 'ALL' to non-FMS directory -- " + MASTER.DIRECTORY.NAME$
  574.       LOCATE 19,9
  575.       PRINT "217. Is the modem a TDD (handles Baudot code)? ---- " + NOT.YET.IN$ ' BAUDOT$
  576.       LOCATE 20,9
  577.       PRINT "218. Modem flow control uses Request-to-Send (RTS)- " + RTS$ ' CPC15-1B
  578.       GOTO 12580
  579. 12510 DISPLAYED.PAGE.NUMBER = 12
  580.       GOSUB 24800
  581.       LOCATE 3,9
  582.       TIME.TO.DROP.TO.DOS$ = "None"
  583.       IF TIME.TO.DROP.TO.DOS > -1 THEN _
  584.          TIME.TO.DROP.TO.DOS$ = STRING$(4-(LEN(STR$(TIME.TO.DROP.TO.DOS))-1),"0") + MID$(STR$(TIME.TO.DROP.TO.DOS),2)
  585. 12512 PRINT "221. Time of day to exit to DOS ------------------- " + TIME.TO.DROP.TO.DOS$ ' CPC15-1B
  586.       LOCATE 4,9
  587.       PRINT "222. Net mail to invoke is ------------------------ " + NET.MAIL$ ' CPC15-1B
  588.       GOTO 12580
  589. 12520 DISPLAYED.PAGE.NUMBER = 13
  590.       GOSUB 24800
  591.       LOCATE  3,9
  592.       PRINT "241. Let new users set their preferences --------- " + NEWUSER.SETS.DEFAULTS$
  593.       LOCATE  4,9
  594.       PRINT "242. New users default sign-on mode -------------- " + NOT.YET.IN$ ' NEW.USER.DEFAULT.MODE$
  595.       LOCATE  5,9
  596.       PRINT "243. New users default file-transfer protocol ---- " + NOT.YET.IN$ ' NEW.USER.DEFAULT.PROTOCOL$
  597.       LOCATE  6,9
  598.       PRINT "244. Line feeds for new users default to --------- " + NOT.YET.IN$ ' NEW.USER.LINE.FEEDS$
  599.       LOCATE  7,9
  600.       PRINT "245. Nulls for new users default to -------------- " + NOT.YET.IN$ ' NEW.USER.NULLS$
  601.       LOCATE  8,9
  602.       PRINT "246. Prompt bell for new users defaults to ------- " + NOT.YET.IN$ ' NEW.USER.BELL$
  603.       LOCATE  9,9
  604.       PRINT "247. New users 'graphics' capability is assumed -- " + NOT.YET.IN$ ' NEW.USER.GRAPHICS$
  605.       LOCATE 10,9
  606.       PRINT "248. New users are assumed UPPERCASE only -------- " + NOT.YET.IN$ ' NEW.USER.CASE$
  607.       LOCATE 11,9
  608.       PRINT "249. New users message margins defaults to ------- " + NOT.YET.IN$ ' STR$(NEW.USER.MARGINS)
  609.       LOCATE 12,9
  610.       PRINT "250. Add new users to USERS file ----------------- " + REMEMBER.NEW.USERS$
  611.       LOCATE 13,9
  612.       PRINT "251. Let new users on even when USERS file full -- " + SURVIVE.NOUSER.ROOM$
  613.       GOTO 12580
  614. 12530 DISPLAYED.PAGE.NUMBER = 14
  615.       GOSUB 24800
  616.       GOTO 12580
  617. 12540 DISPLAYED.PAGE.NUMBER = 15
  618.       GOSUB 24800
  619.       GOTO 12580
  620. 12550 DISPLAYED.PAGE.NUMBER = 16
  621.       GOSUB 24800
  622.       GOTO 12580
  623. 12560 DISPLAYED.PAGE.NUMBER = 17
  624.       GOSUB 24800
  625.       GOTO 12580
  626. 12570 DISPLAYED.PAGE.NUMBER = 18
  627.       GOSUB 24800
  628.       GOTO 12580
  629. 12580 GOSUB 24890
  630. 12590 GOSUB 22160
  631.       IF IX THEN _            'IX       Key    Where to branch to
  632.          ON IX GOTO 12360, _  ' 1        F1 - Global Parameters (Part 1)
  633.                     12370, _  ' 2        F2 - Global Parameters (Part 2)
  634.                     12380, _  ' 3        F3 - Global Parameters (Part 3)
  635.                     12390, _  ' 4        F4 - Static RBBS-PC Files
  636.                     12400, _  ' 5        F5 - Dynamic RBBS-PC Files
  637.                     12410, _  ' 6        F6 - RBBS-PC "doors"
  638.                     12420, _  ' 7        F7 - RBBS-PC security parameters
  639.                     12470, _  ' 8        F8 - Multiple RBBS-PC parameters
  640.                     12480, _  ' 9        F9 - RBBS-PC's utilities
  641.                     12490, _  '10       F10 - RBBS-PC File Manager
  642.                     12500, _  '11  Shift-F1 - RBBS-PC communications parameters
  643.                     12510, _  '12  Shift-F2 - RBBS-PC Net Mail
  644.                     12520, _  '13  Shift-F3 - New user parameters
  645.                     12310, _  '14  Shift-F4 - Reserved for future use
  646.                     12310, _  '15  Shift-F5 - Reserved for future use
  647.                     12310, _  '16  Shift-F6 - Reserved for future use
  648.                     12310, _  '17  Shift-F7 - Reserved for future use
  649.                     12310, _  '18  Shift-F8 - Reserved for future use
  650.                     12340, _  '19      PgUp - Go to previous page
  651.                     12330, _  '20      PgDn - Go to next page
  652.                     12630, _  '21       End - Terminate CONFIG
  653.                     12620     '22  Enter - Option selected followed by "enter"
  654.       GOTO 12590
  655. 12620 GOSUB 50340
  656.       IF VAL(HJ$) < 1 OR VAL(HJ$) > 260 THEN _
  657.          GOTO 12580
  658.       IPAGE = INT(VAL(HJ$)/20)
  659.       ILOOKUP = VAL(HJ$) - (20*IPAGE)
  660.       IPAGE = IPAGE + 1
  661.       IF ILOOKUP < 1 THEN _
  662.          ILOOKUP = 20 : _
  663.          IPAGE = IPAGE - 1
  664. 12630 EXIT SUB
  665. '
  666. ' *****************************************************************************
  667. ' * IDENTIFY THE NETWORK TYPES THAT RBBS-PC CAN RUN IN                        *
  668. ' *****************************************************************************
  669. '
  670. 21810 CLS
  671.       LOCATE 3,5
  672.       PRINT "RBBS-PC is supported in the following:"
  673.       LOCATE 5,20
  674.       PRINT "Environment"
  675.       LOCATE 7,10
  676.       PRINT "0. Single RBBS-PC in an IBM DOS environment"
  677.       LOCATE 9,10
  678.       PRINT "1. MultiLink (multi-tasking under single DOS)
  679.       LOCATE 11,10
  680.       PRINT "2. Omninet (CORVUS)"
  681.       LOCATE 13,10
  682.       PRINT "3. PC-NET (Orchid)"
  683.       LOCATE 15,10
  684.       PRINT "4. DESQview (Quarterdeck)"
  685.       LOCATE 17,10
  686.       PRINT "5. 10 NET (Fox Research)"                               ' CPC15-1B
  687.       LOCATE 19,10                                                   ' CPC15-1B
  688.       PRINT "6. IBM DOS (3.1 or above) file sharing not supported"   ' CPC15-1B
  689. 21870 GOSUB 50340
  690.       XX$ = "Select environment (0 to 6, ENTER to end)"              ' CPC15-1B
  691.       GOSUB 50345
  692.       LINE INPUT;X$
  693.       IF X$ = "" THEN _
  694.          RETURN
  695.       NETWORK.TYPE = VAL(X$)
  696.       GOSUB 21890
  697.       RETURN
  698. 21890 IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 6 THEN _                 ' CPC15-1B
  699.          GOTO 21870                                                  ' CPC15-1B
  700. 21895 IF NETWORK.TYPE = 0 THEN _
  701.          NETWORK.TYPE$ = "IBM's DOS
  702. 21900 IF NETWORK.TYPE = 1 THEN _
  703.          NETWORK.TYPE$ = "MultiLink
  704.       IF NETWORK.TYPE = 2 THEN _
  705.          NETWORK.TYPE$ = "Omninet
  706.       IF NETWORK.TYPE = 3 THEN _
  707.          NETWORK.TYPE$ = "PC-NET
  708.       IF NETWORK.TYPE = 4 THEN _
  709.          NETWORK.TYPE$ = "DESQview"
  710.       IF NETWORK.TYPE = 5 THEN _                                     ' CPC15-1B
  711.          NETWORK.TYPE$ = "10 NET"                                    ' CPC15-1B
  712.       IF NETWORK.TYPE = 6 THEN _                                     ' CPC15-1B
  713.          NETWORK.TYPE$ = "IBM's file sharing -- future"
  714.       RETURN
  715. '
  716. ' *****************************************************************************
  717. ' * COMMON SUBROUTINE TO HANDLE THE FUNCTION KEYS, SCROLL BETWEEN CONFIG'S    *
  718. ' * PAGES OF OPTIONS, AND USER'S SELECTING A NUMERIC 4-CHARACTER OPTION.      *
  719. ' *****************************************************************************
  720. '
  721. 22160 I! = FRE(C$)
  722.       Y$ = INKEY$
  723.       IX = 0
  724.       IF LEN(Y$) < 1 THEN _
  725.          GOTO 22160
  726.       IF LEN(Y$) = 2 THEN _               ' IF A FUNCTION KEY, BRANCH
  727.          GOTO 22240
  728.       IF ASC(Y$) = 13 THEN _              ' IF A CARRIAGE RETURN, RETURN
  729.          IX = 22 : _
  730.          RETURN
  731.       IF ASC(Y$) = 8 AND LEN(HJ$) > 0 THEN _
  732.          HJ$ = LEFT$(HJ$,LEN(HJ$)-1) : _
  733.          PRINT CHR$(29) + " " + CHR$(29); : _
  734.          GOTO 22160
  735.       IF ASC(Y$) < 48 OR ASC(Y$) > 57 THEN _
  736.          GOTO 22160
  737.       PRINT Y$;
  738.       HJ$ = HJ$ + Y$
  739.       OPTION$ = HJ$
  740.       IF LEN(HJ$) > 4 THEN _              ' IF MORE THAN FOUR CHARACTERS,
  741.          IX = 22                          ' RETURN
  742.       RETURN
  743. '
  744. ' *****************************************************************************
  745. ' * COMMON SUBROUTINE TO HANDLE SET UP RETURN CODES FOR FUNCTION KEYS THAT    *
  746. ' * WERE PRESSED ON THE LOCAL PC RUNNING CONFIG                               *
  747. ' *****************************************************************************
  748. '
  749. 22240 IX = ASC(RIGHT$(Y$,1))
  750.       Y$ = "
  751.       IF IX < 59 OR IX > 91 THEN _        ' IGNORE IF NOT F1 THROUGH F10 OR
  752.          IX = 0: _                        ' SHIFT-F1 THROUGH SHIFT-F8
  753.          RETURN
  754.       IF IX = 73 THEN _                   ' IF PGUP THEN SET IX = 19
  755.          IX = 19 : _
  756.          RETURN
  757.       IF IX = 79 THEN _                   ' IF END THEN SET IX = 21
  758.          IX = 21 : _
  759.          RETURN
  760.       IF IX = 81 THEN _                   ' IF PGDN THEN SET IX = 20
  761.          IX = 20 : _
  762.          RETURN
  763.       IF (IX-58) < 11 THEN _              ' IF F1 THROUGH F10 SET IX = 1
  764.          IX = IX-58 : _                   ' THROUGH 10 ACCORDINGLY.
  765.          RETURN
  766.       IF (IX-73) > 10 AND _               ' IF SHIFT-F1 THROUGH SHIFT-F8 THEN
  767.          (IX-73) < 19 THEN _              ' SET IX = 11 THROUGH 18
  768.             IX = IX - 73 : _              ' ACCORDINGLY.
  769.             RETURN
  770.       IX = 0
  771.       RETURN
  772. '
  773. ' *****************************************************************************
  774. ' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS                  *
  775. ' *****************************************************************************
  776. '
  777. 24800 CLS
  778.       I! = FRE(C$)
  779.       COLOR 0,7,0
  780.       LOCATE 1,10
  781.       PRINT "RBBS-PC CPC15.1 Default Configuration " + CONFIG.VERSION$;
  782.       IF F THEN _
  783.          GOSUB 24970
  784.       COLOR FG,BG,BORDER
  785.       PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
  786.       RETURN
  787. 24890 A$ = "Enter parameter # to change, END to update, PgUp/PgDn to scroll:"
  788. 24900 LOCATE 24,5
  789.       PRINT A$;
  790.       X = POS(0) + 2
  791.       PRINT STRING$((75-LEN(A$)),32);
  792.       LOCATE 24,X
  793.       COLOR FG,BG,BORDER
  794.       HJ$ = "
  795.       I! = FRE(C$)
  796.       RETURN
  797. '
  798. ' *****************************************************************************
  799. ' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS       *
  800. ' *****************************************************************************
  801. '
  802. 24970 LOCATE 2,1
  803.       PRINT SPACE$(10)
  804.       LOCATE 2,10
  805.       A$ = "Private"
  806.       IF F = 2 THEN _
  807.          A$ = "Public"
  808.       COLOR 31,0,0
  809.       PRINT "(" + A$ + " Conference Maintenance Mode for " + _
  810.             MID$(MAIN.MESSAGE.FILE$,1,INSTR(MAIN.MESSAGE.FILE$,"M.DEF")-1) + _
  811.             ")";
  812.       RETURN
  813. '
  814. ' *****************************************************************************
  815. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD           *
  816. ' *****************************************************************************
  817. '
  818. 30040 OPEN "R",2,MAIN.MESSAGE.FILE$,128        ' <---- read MESSAGES checkpoint record
  819.       FIELD 2,128 AS RR$
  820.       GET 2,1
  821.       CALLS.TODATE!          = VAL(MID$(RR$,1,8))     '  1-  8  =  number of last message on system
  822.       FIRST.USER.RECORD      = VAL(MID$(RR$,52,5))    ' 52- 56  =  first rec. of user file
  823.       CURRENT.USER.COUNT     = VAL(MID$(RR$,57,5))    ' 57- 61  =  next avail. user record
  824.       HIGHEST.USER.RECORD    = VAL(MID$(RR$,62,5))    ' 62- 66  =  last rec. of user file
  825.       FIRST.MESSAGE.RECORD   = VAL(MID$(RR$,68,7))    ' 68- 74 = first rec. of msgs file
  826.       NEXT.MESSAGE.RECORD    = VAL(MID$(RR$,75,7))    ' 75- 81 = next avail. msgs record
  827.       HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7))    ' 82- 88 = last rec. of msgs file
  828.       MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7))    ' 89- 95 = maximum number of messages
  829.       MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2))   '127-128 = maximum number of "nodes"
  830.       CLOSE 2
  831.       RETURN
  832. '
  833. ' *****************************************************************************
  834. ' * COMMON ROUTINE TO GET THE LENGTH OF A FILE                                *
  835. ' *****************************************************************************
  836. '
  837. 30180 OPEN "R",2,FILE$,128      ' <---- get length of file
  838.       FIELD 2,128 AS RR$
  839.       UG = LOF(2)/128
  840.       CLOSE 2
  841.       RETURN
  842. '
  843. ' *****************************************************************************
  844. ' * COMMON SUBROUTINE TO KEEP STRING SPACE CLEAN AND CLEAR LINE 24            *
  845. ' *****************************************************************************
  846. '
  847. 50340 I! = FRE(C$)
  848.       LOCATE 24,1
  849.       PRINT STRING$(79,32);
  850.       RETURN
  851. '
  852. ' *****************************************************************************
  853. ' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24                         *
  854. ' *****************************************************************************
  855. '
  856. 50345 GOSUB 50340
  857.       LOCATE 24,5
  858.       PRINT XX$;
  859.       RETURN
  860. '
  861. ' *****************************************************************************
  862. ' * COMMON SUBROUTINE TO BEEP AT THE SYSOP                                    *
  863. ' *****************************************************************************
  864. '
  865. 60380 FOR I = 1 TO 3
  866.         SOUND 1000*I,1
  867.       NEXT
  868.       RETURN
  869.       END SUB
  870. '  $SUBTITLE: 'CNFGINIT - subroutine to initialize CONFIG's constants'
  871. '  $PAGE
  872. '
  873. '  SUBROUTINE NAME    --  CNFGINIT
  874. '
  875. '  INPUT PARAMETERS   --  NONE
  876. '
  877. '  OUTPUT PARAMETERS  --  CONFIG'S CONSTANTS INITIALIZED
  878. '
  879. '  SUBROUTINE PURPOSE --  TO INITIALIZE THE CONSTANTS USED BY CONFIG
  880. '
  881. 60385 SUB CNFGINIT STATIC
  882. '
  883. ' *****************************************************************************
  884. ' * INITALIZE ALL VARIABLES IF A .DEF FILE DOESN'T AREADY EXIST               *
  885. ' *****************************************************************************
  886. '
  887.       D$                         = DD$ + ":"
  888.       FALSE                      = 0
  889.       TRUE                       = NOT FALSE
  890.       SYSOP.SECURITY.LEVEL       = 10
  891.       ACT.MNTHS.B4.DELETING      = 1
  892.       ACTIVE.BULLETINS           = 6
  893.       ALWAYS.STREW.TO$           = ""
  894.       ANS.MENU$                  = D$ + "MENUA"
  895.       ASK.IDENTITY               = FALSE
  896.       BG                         = 0
  897.       BORDER                     = 0
  898.       BUFFER.SIZE                = 128
  899.       BULLETIN.MENU$             = "BULLET"
  900.       BULLETIN.PREFIX$           = "BULLET"
  901.       BULLETINS.OPTIONAL         = TRUE
  902.       C$                         = ""
  903.       CALLERS.FILE$              = D$ + "CALLERS"
  904.       CODE.TYPE                  = FALSE
  905.       COM.PORT$                  = "COM1"
  906.       COMMANDS.BETWEEN.RINGS     = FALSE
  907.       COMMANDS.IN.PROMPT         = TRUE
  908.       COMMENTS.AS.MESSAGES       = FALSE
  909.       COMMENTS.FILE$             = D$ + "COMMENTS"
  910.       COMPUTER.TYPE              = 0
  911.       CONFERENCE.MENU$           = D$ + "CONFENCE"
  912.       CONFERENCE.VIEWER.SEC.LVL  = 0
  913.       CONFIG.VERSION$            = "(Version 3.02)"                  ' CPC15-1B
  914.       DEFAULT.CATEGORY.CODE$     = "UC "
  915.       DAYS.IN.SUBSCRIPTION.PERIOD = 365
  916.       DAYS.TO.WARN               = 60
  917.       DIR.CATEGORY.FILE$         = D$ + "DIR.CAT"
  918.       DEFAULT.MACHINE.TYPE$      = "IBMPC"
  919.       DEFAULT.SECURITY.LEVEL     = 5
  920.       DIRECTORY.EXTENTION$       = "DIR"
  921.       DIRECTORY.PATH$            = D$
  922.       DISK.FOR.DOS$              = D$
  923.       DISKFULL.GO.OFFLINE        = TRUE
  924.       DNLD.SUB                   = 0
  925.       DOORS.AVAILABLE            = FALSE
  926.       DOORS.SECURITY.LEVEL       = SYSOP.SECURITY.LEVEL
  927.       DOORS.TERMINAL.TYPE        = 8
  928.       DOS.VERSION                = 2
  929.       DOWNLOAD.DRIVES$           = DD$ + DD$
  930.       DOWNLOAD.TO.SUBDIR         = FALSE
  931.       DRIVE.FOR.BULLETINS$       = DD$
  932.       DRIVE.FOR.HELP.FILES$      = DD$
  933.       DTR.DROP.DELAY             = 3
  934.       DUMB.MODEM                 = FALSE
  935.       END.OFFICE.HOURS           = 2200
  936.       EXPERT.USER                = 0
  937.       EXPIRED.SECURITY           = DEFAULT.SECURITY.LEVEL
  938.       EXTENDED.LOGGING           = FALSE
  939.       FC                         = 5
  940.       FG                         = 7
  941.       FILE.COMMANDS.DEFAULTS$    = "DGLNSUV"
  942.       FILE.COMMANDS$             = FILE.COMMANDS.DEFAULTS$
  943.       FILE.NOTIFY                = FALSE
  944.       FILES.FUNCTION$(1,1)       = "D)ownload a file      "
  945.       FILES.FUNCTION$(2,1)       = "G)oodbye              "
  946.       FILES.FUNCTION$(3,1)       = "L)ist file directory  "
  947.       FILES.FUNCTION$(4,1)       = "N)ew file search      "
  948.       FILES.FUNCTION$(5,1)       = "S)earch files         "
  949.       FILES.FUNCTION$(6,1)       = "U)pload a file        "
  950.       FILES.FUNCTION$(7,1)       = "V)erbose ARC list     "
  951.       FILES.FUNCTION$(1,2)       = "D"
  952.       FILES.FUNCTION$(2,2)       = "G"
  953.       FILES.FUNCTION$(3,2)       = "L"
  954.       FILES.FUNCTION$(4,2)       = "N"
  955.       FILES.FUNCTION$(5,2)       = "S"
  956.       FILES.FUNCTION$(6,2)       = "U"
  957.       FILES.FUNCTION$(7,2)       = "V"
  958.       FILESEC.FILE$              = D$ + "FILESEC"
  959.       GB                         = FC
  960.       GLOBAL.COMMANDS.DEFAULTS$  = "H?QX"
  961.       GLOBAL.COMMANDS$           = GLOBAL.COMMANDS.DEFAULTS$
  962.       GLOBAL.FUNCTION$(1,1)      = "H)elp on-line         "
  963.       GLOBAL.FUNCTION$(2,1)      = "?)help on-line (=H)   "
  964.       GLOBAL.FUNCTION$(3,1)      = "Q)uit this part       "
  965.       GLOBAL.FUNCTION$(4,1)      = "X)Expert toggle on/off"
  966.       GLOBAL.FUNCTION$(1,2)      = "H"
  967.       GLOBAL.FUNCTION$(2,2)      = "?"
  968.       GLOBAL.FUNCTION$(3,2)      = "Q"
  969.       GLOBAL.FUNCTION$(4,2)      = "X"
  970.       GO.TO.SHELL                = TRUE
  971.       HELP$(3)                   = "HELP03"
  972.       HELP$(4)                   = "HELP04"
  973.       HELP$(7)                   = "HELP07"
  974.       HELP$(9)                   = "HELP09"
  975.       HELP.EXTENSION$            = "HLP"
  976.       HELP.FILE.PREFIX$          = "HELP0"
  977.       HELP.PATH$                 = D$
  978.       IB                         = 0
  979.       LEN.HASH                   = 31
  980.       LEN.INDIV                  = 0
  981.       LIMIT.DAILY.TIME           = FALSE
  982.       LIMIT.SEARCH.TO.FMS        = FALSE
  983.       LOCAL.PASSWORD$            = "RBBS-PC"
  984.       MAIN.COMMANDS.DEFAULTS$    = "ABCDEFIJKOPRSTUVW"
  985.       MAIN.COMMANDS$             = MAIN.COMMANDS.DEFAULTS$
  986.       MAIN.FUNCTION$(1,1)        = "A)nswer questionnaire "
  987.       MAIN.FUNCTION$(2,1)        = "B)ulletins            "
  988.       MAIN.FUNCTION$(3,1)        = "C)omments             "
  989.       MAIN.FUNCTION$(4,1)        = "D)oor subsystem       "
  990.       MAIN.FUNCTION$(5,1)        = "E)nter message        "
  991.       MAIN.FUNCTION$(6,1)        = "F)iles subsystem      "
  992.       MAIN.FUNCTION$(7,1)        = "I)nitial welcome      "
  993.       MAIN.FUNCTION$(8,1)        = "J)oin a conference    "
  994.       MAIN.FUNCTION$(9,1)        = "K)ill messages        "
  995.       MAIN.FUNCTION$(10,1)       = "O)perator page        "
  996.       MAIN.FUNCTION$(11,1)       = "P)ersonal mail        "
  997.       MAIN.FUNCTION$(12,1)       = "R)ead messages        "
  998.       MAIN.FUNCTION$(13,1)       = "S)can messages header "
  999.       MAIN.FUNCTION$(14,1)       = "T)opic msg scan       "
  1000.       MAIN.FUNCTION$(15,1)       = "U)tilities subsystem  "
  1001.       MAIN.FUNCTION$(16,1)       = "V)iew a conference    "
  1002.       MAIN.FUNCTION$(17,1)       = "W)ho's on other nodes "
  1003.       MAIN.FUNCTION$(1,2)        = "A"
  1004.       MAIN.FUNCTION$(2,2)        = "B"
  1005.       MAIN.FUNCTION$(3,2)        = "C"
  1006.       MAIN.FUNCTION$(4,2)        = "D"
  1007.       MAIN.FUNCTION$(5,2)        = "E"
  1008.       MAIN.FUNCTION$(6,2)        = "F"
  1009.       MAIN.FUNCTION$(7,2)        = "I"
  1010.       MAIN.FUNCTION$(8,2)        = "J"
  1011.       MAIN.FUNCTION$(9,2)        = "K"
  1012.       MAIN.FUNCTION$(10,2)       = "O"
  1013.       MAIN.FUNCTION$(11,2)       = "P"
  1014.       MAIN.FUNCTION$(12,2)       = "R"
  1015.       MAIN.FUNCTION$(13,2)       = "S"
  1016.       MAIN.FUNCTION$(14,2)       = "T"
  1017.       MAIN.FUNCTION$(15,2)       = "U"
  1018.       MAIN.FUNCTION$(16,2)       = "V"
  1019.       MAIN.FUNCTION$(17,2)       = "W"
  1020.       MAIN.MESSAGE.BACKUP$       = D$ + "MESSAGES.BAK"
  1021.       MAIN.MESSAGE.FILE$         = D$ + "MESSAGES"
  1022.       MAIN.USER.FILE$            = D$ + "USERS"
  1023.       MASTER.DIRECTORY.NAME$     = ""
  1024.       MAX.ALLOWED.MSGS.FRM.DEF   = 5
  1025.       MAX.DESC.LEN               = 40
  1026.       MAX.MESSAGE.LINES          = 19
  1027.       MAX.USR.FILE.SIZE.FRM.DEF  = 16
  1028.       MAXD                       = SYSOP.SECURITY.LEVEL
  1029.       MAXIMUM.DISPLAYABLE.PAGES  = 13                                ' CPC15-1B
  1030.       MAXIMUM.PASSWORD.CHANGES   = 3
  1031.       MAXIMUM.VIOLATIONS         = 5
  1032.       MAXIMUM.NUMBER.OF.NODES    = 1
  1033.       MENU$(1)                   = D$ + "MENU1"
  1034.       MENU$(2)                   = D$ + "MENU2"
  1035.       MENU$(3)                   = D$ + "MENU3"
  1036.       MENU$(4)                   = D$ + "MENU4"
  1037.       MENU$(5)                   = D$ + "MENU5"
  1038.       MESSAGE.REMINDER           = TRUE
  1039.       MIN.SEC.TO.VIEW            = DEFAULT.SECURITY.LEVEL
  1040.       MINIMUM.LOGON.SECURITY     = 0
  1041.       MINIMUM.SECURITY.FOR.TEMP.PASSWORD = 5
  1042.       MINUTES.PER.SESSION!       = 72
  1043.       MLCOM                      = FALSE
  1044.       MM                         = 5
  1045.       MNP.SUPPORT                = FALSE
  1046.       MO$                        = DD$
  1047.       MODEM.ANSWER.COMMAND$      = "ATQ0X1V1A"
  1048.       MODEM.COMMAND.DELAY.TIME   = 1
  1049.       MODEM.COUNT.RINGS.COMMAND$ = "ATS1?"
  1050.       MODEM.GO.OFFHOOK.COMMAND$  = "ATQ1E1H1M0"
  1051.       MODEM.INIT.BAUD$           = "300"
  1052.       MODEM.INIT.COMMAND$        = "ATM0Q1S2=255S10=30E0S0=0Q0X1"    ' CPC15-1B
  1053.       MODEM.INIT.WAIT.TIME       = 2
  1054.       MODEM.RESET.COMMAND$       = "ATZ"
  1055.       MUSIC                      = FALSE
  1056.       NET.MAIL$                  = "NONE"                            ' CPC15-1B
  1057.       NETWORK.TYPE               = 0
  1058.       NETWORK.TYPE$              = "IBM's DOS"
  1059.       NEW.FILES.CHECK            = FALSE
  1060.       NEWUSER.FILE$              = D$ + "NEWUSER"
  1061.       NEWUSER.SETS.DEFAULTS      = TRUE
  1062.       OMIT.MAIN.DIRECTORY$       = "NO"
  1063.       OMIT.UPLOAD.DIRECTORY$     = "NO"
  1064.       OVERWRITE.SECURITY.LEVEL   = SYSOP.SECURITY.LEVEL
  1065.       PAGE.LENGTH                = 23
  1066.       PAGING.PRINTER.SUPPORT$    = ". "
  1067.       PASSWORD.FILE$             = D$ + "PASSWRDS"
  1068.       PCJR                       = 0
  1069.       PROTOCOL.PATH$             = D$
  1070.       PROMPT.BELL                = 0
  1071.       PROMPT.HASH$               = "Name"
  1072.       PROMPT.INDIV$              = ""
  1073.       RBBS.BAT$                  = D$ + "RBBS.BAT"
  1074.       RBBS.NAME$                 = "RBBS-PC"
  1075.       RCTTY.BAT$                 = D$ + "RCTTY.BAT"
  1076.       RECYCLE.TO.DOS             = 0
  1077.       RECYCLE.TO.DOS$            = "INTERNAL"
  1078.       REDIRECT.IO.METHOD         = TRUE
  1079.       REMEMBER.NEW.USERS         = TRUE
  1080.       REMIND.FILE.TRANSFERS      = FALSE
  1081.       REMIND.PROFILE             = FALSE
  1082.       REQUIRE.NON.ASCII          = TRUE
  1083.       REQUIRED.QUESTIONNAIRE$    = "NONE"
  1084.       REQUIRED.RINGS             = 1
  1085.       RESTRICT.BAUD              = FALSE
  1086.       RESTRICT.BY.DATE           = FALSE
  1087.       RESTRICT.VALID.CMDS        = FALSE
  1088.       RTS$                       = "NO"                              ' CPC15-1B
  1089.       SEC.LVL.EXEMPT.FRM.PURGING = SYSOP.SECURITY.LEVEL
  1090.       SF                         = SYSOP.SECURITY.LEVEL
  1091.       SHOOT.YOURSELF             = FALSE
  1092.       SHOW.SECTION               = TRUE
  1093.       SL.CATEGORIZE.UPLOADS      = SYSOP.SECURITY.LEVEL
  1094.       START.HASH                 = 1
  1095.       START.INDIV                = 0
  1096.       START.OFFICE.HOURS         = 800
  1097.       SURVIVE.NOUSER.ROOM        = FALSE
  1098.       SYSOP.COMMANDS.DEFAULTS$   = "1234567"
  1099.       SYSOP.COMMANDS$            = SYSOP.COMMANDS.DEFAULTS$
  1100.       SYSOP.FUNCTION$(1,1)       = " 1 List comments      "
  1101.       SYSOP.FUNCTION$(2,1)       = " 2 List CALLERS log   "
  1102.       SYSOP.FUNCTION$(3,1)       = " 3 Recover a message  "
  1103.       SYSOP.FUNCTION$(4,1)       = " 4 Erase comments     "
  1104.       SYSOP.FUNCTION$(5,1)       = " 5 User maintenance   "
  1105.       SYSOP.FUNCTION$(6,1)       = " 6 Toggle Page bell   "
  1106.       SYSOP.FUNCTION$(7,1)       = " 7 Exit to DOS        "
  1107.       SYSOP.FUNCTION$(1,2)       = " 1"
  1108.       SYSOP.FUNCTION$(2,2)       = " 2"
  1109.       SYSOP.FUNCTION$(3,2)       = " 3"
  1110.       SYSOP.FUNCTION$(4,2)       = " 4"
  1111.       SYSOP.FUNCTION$(5,2)       = " 5"
  1112.       SYSOP.FUNCTION$(6,2)       = " 6"
  1113.       SYSOP.FUNCTION$(7,2)       = " 7"
  1114.       SYSOP.FIRST.NAME$          = "TOM"
  1115.       SYSOP.LAST.NAME$           = "MACK"
  1116.       SYSOP.MENU.SECURITY.LEVEL  = SYSOP.SECURITY.LEVEL
  1117.       SYSOP.PASSWORD.1$          = "RBBS-PC"
  1118.       SYSOP.PASSWORD.2$          = "CPC15"
  1119.       TIME.TO.DROP.TO.DOS        = -1
  1120.       TRASHCAN.FILE$             = D$ + "TRASHCAN"
  1121.       TURN.PRINTER.OFF           = FALSE
  1122.       TURBO.RBBS                 = TRUE
  1123.       UE                         = 5
  1124.       FMS.DIRECTORY$             = ""
  1125.       UPCAT.HELP$                = "UPCAT"
  1126.       UPLOAD.DIRECTORY$          = "99"
  1127.       UPLOAD.PATH$               = D$
  1128.       UPLOAD.SUBDIR$             = ""
  1129.       UPLOAD.TIME.FACTOR!        = 0
  1130.       UPLOAD.TO.SUBDIR           = FALSE
  1131.       USE.COLOR                  = FALSE
  1132.       USE.EXTERNAL.XMODEM        = FALSE
  1133.       UTIL.COMMANDS.DEFAULTS$    = "BCFGLMPRSTU"
  1134.       UTIL.COMMANDS$             = UTIL.COMMANDS.DEFAULTS$
  1135.       UTILITY.FUNCTION$(1,1)     = "B)aud rate            "
  1136.       UTILITY.FUNCTION$(2,1)     = "C)lock (time)         "
  1137.       UTILITY.FUNCTION$(3,1)     = "F)ile x-fer protocol  "
  1138.       UTILITY.FUNCTION$(4,1)     = "G)raphics             "
  1139.       UTILITY.FUNCTION$(5,1)     = "L)ines per page       "
  1140.       UTILITY.FUNCTION$(6,1)     = "M)sg margin setting   "
  1141.       UTILITY.FUNCTION$(7,1)     = "P)assword change      "
  1142.       UTILITY.FUNCTION$(8,1)     = "R)eview defaults      "
  1143.       UTILITY.FUNCTION$(9,1)     = "S)tatistics           "
  1144.       UTILITY.FUNCTION$(10,1)    = "T)oggle               "
  1145.       UTILITY.FUNCTION$(11,1)    = "U)ser log scan        "
  1146.       UTILITY.FUNCTION$(1,2)     = "B"
  1147.       UTILITY.FUNCTION$(2,2)     = "C"
  1148.       UTILITY.FUNCTION$(3,2)     = "F"
  1149.       UTILITY.FUNCTION$(4,2)     = "G"
  1150.       UTILITY.FUNCTION$(5,2)     = "L"
  1151.       UTILITY.FUNCTION$(6,2)     = "M"
  1152.       UTILITY.FUNCTION$(7,2)     = "P"
  1153.       UTILITY.FUNCTION$(8,2)     = "R"
  1154.       UTILITY.FUNCTION$(9,2)     = "S"
  1155.       UTILITY.FUNCTION$(10,2)    = "T"
  1156.       UTILITY.FUNCTION$(11,2)    = "U"
  1157.       WAIT.BEFORE.DISCONNECT     = 180
  1158.       WELCOME.FILE$              = D$ + "WELCOME"
  1159.       WELCOME.INTERRUPTABLE      = TRUE
  1160.       WILL.SUBDIRS.B.USED        = FALSE
  1161.       FOR I = 1 TO NUM.SYSOP
  1162.         SYSOP.FUNCTION(I) = SF
  1163.       NEXT
  1164.       FOR I = 1 TO NUM.MAIN
  1165.         MAIN.FUNCTION(I) = MM
  1166.       NEXT
  1167.       FOR I = 1 TO NUM.FILES
  1168.         FILES.FUNCTION(I) = FC
  1169.       NEXT
  1170.       FOR I = 1 TO NUM.UTILITY
  1171.         UTILITY.FUNCTION(I) = UE
  1172.       NEXT
  1173.       FOR I = 1 TO NUM.GLOBAL
  1174.         GLOBAL.FUNCTION(I) = GB
  1175.       NEXT
  1176.       END SUB
  1177. '  $SUBTITLE: 'ASKRO - ask a question at a specific row'
  1178. '  $PAGE
  1179. '
  1180. '  SUBROUTINE NAME    --  ASKRO
  1181. '
  1182. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1183. '                         ANS$           STRING TO PUT THE ANSWER IN
  1184. '                         STRNG$         STRING CONTAINING THE QUESTION
  1185. '                         RO             ROW TO ASK THE QUESTION ON
  1186. '
  1187. '  OUTPUT PARAMETERS  --  ANS$           RESPONSE FROM THE KEYBOARD
  1188. '
  1189. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AT A
  1190. '                         SPECIFIC ROW
  1191. '
  1192.       SUB ASKRO (STRNG$,RO,ANS$) STATIC
  1193. 61100 LOCATE RO,1
  1194.       PRINT SPACE$(79);
  1195.       LOCATE RO,5
  1196.       PRINT STRNG$;" ";
  1197.       LINE INPUT;ANS$
  1198.       END SUB
  1199. '  $SUBTITLE: 'GETNUMYN - get a TRUE-FALSE answer to a YES OR NO question'
  1200. '  $PAGE
  1201. '
  1202. '  SUBROUTINE NAME    --  GETNUMYN
  1203. '
  1204. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1205. '                         STRNG$         STRING CONTAINING THE QUESTION
  1206. '
  1207. '  OUTPUT PARAMETERS  --  ANS            Returned value - -1 IF yes, 0 IF no
  1208. '
  1209. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AND GET A
  1210. '                         YES OR NO ANSWER CONVERTED TO TRUE/FALSE
  1211. '
  1212.        SUB GETNUMYN (STRNG$,ANS) STATIC
  1213.        CALL GETYESNO (STRNG$,ANS$)
  1214.        ANS = FNYESNO (ANS$)
  1215.        END SUB
  1216. '  $SUBTITLE: 'GETNUMYN - Ask a YES OR NO question'
  1217. '  $PAGE
  1218. '
  1219. '  SUBROUTINE NAME    --  GETYESNO
  1220. '
  1221. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1222. '                         ANS$           STRING TO PUT THE ANSWER IN
  1223. '                         STRNG$         STRING CONTAINING THE QUESTION
  1224. '
  1225. '  OUTPUT PARAMETERS  --  ANS$           RESPONSE FROM THE KEYBOARD
  1226. '
  1227. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AND GET A
  1228. '                         YES OR NO ANSWER
  1229. '
  1230.       SUB GETYESNO (STRNG$,ANS$) STATIC
  1231. 61200 CALL ASKRO (STRNG$+" (YES or NO)",24,HJ$)
  1232.       L = LEN(HJ$)
  1233.       IF L<1 OR L>3 THEN _
  1234.          GOTO 61207
  1235.       CALL ALLCAPS(HJ$)
  1236.       X = INSTR("NY",LEFT$(HJ$,1))
  1237.       ON X GOTO 61210,61212
  1238. 61207 BEEP
  1239.       GOTO 61200
  1240. 61210 ANS$ = "NO"
  1241.       EXIT SUB
  1242. 61212 ANS$ = "YES"
  1243.       EXIT SUB
  1244.       END SUB
  1245. '  $SUBTITLE: 'ALLCAPS - convert a sting into all capital letters'
  1246. '  $PAGE
  1247. '
  1248. '  SUBROUTINE NAME    --  ALLCAPS
  1249. '
  1250. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1251. '                         STRNG$         STRING CONTAINING THE QUESTION
  1252. '
  1253. '  OUTPUT PARAMETERS  --  STRNG$         CAPITALIZED STRING
  1254. '
  1255. '  SUBROUTINE PURPOSE --  TO CAPITALIZE A STRING
  1256. '
  1257.       SUB ALLCAPS (STRNG$) STATIC
  1258.       FOR Z = 1 TO LEN(STRNG$)
  1259.         MID$(STRNG$,Z,1) = CHR$(ASC(MID$(STRNG$,Z,1)) + _
  1260.                            32*(ASC(MID$(STRNG$,Z,1))>96))
  1261.       NEXT
  1262.       END SUB
  1263. '  $SUBTITLE: 'ASKUPOS - find the unique user field for USERS'
  1264. '  $PAGE
  1265. '
  1266. '  SUBROUTINE NAME    --  ASKUPOS
  1267. '
  1268. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1269. '                         HDR$           HEADER
  1270. '                         BEGIN.COL      BEGINNING COLUMN OF FIELD
  1271. '                         FIELD.LEN      LENGTH OF FIELD IN USER'S RECORD
  1272. '                         PRMPT$         PROMPT TO GIVE FOR FIELD
  1273. '
  1274. '  OUTPUT PARAMETERS  --  ABOVE INPUTS UPDATED WITH USER'S RESPONSES
  1275. '
  1276. '  SUBROUTINE PURPOSE --  TO ASK THE SYSOP WHAT UNIQUE FIELD IN THE USERS
  1277. '                         RECORD IS TO BE ASKED FOR AT LOGON
  1278. '
  1279.       SUB ASKUPOS (HDR$,BEGIN.COL,FIELD.LEN,PRMPT$) STATIC
  1280.       CLS
  1281.       LOCATE 3,20
  1282.       PRINT HDR$;
  1283. 61300 LOCATE 6,5
  1284.       PRINT "1.  BEGINNING COLUMN in USERS file";TAB(44);STR$(BEGIN.COL);"   "; ' CPC15-1B
  1285.       LOCATE 8,5
  1286.       PRINT "2.  Number of CHARACTERS to use";TAB(44);STR$(FIELD.LEN);"   ";
  1287.       LOCATE 10,5
  1288.       PRINT "3.  PROMPT to display to callers";TAB(45);PRMPT$;SPACE$(34-LEN(PRMPT$));
  1289. 61310 CALL ASKRO ("Select option to change (1-3, ENTER to end)",24,X$)
  1290.       IF X$ = "" THEN _
  1291.          EXIT SUB
  1292.       X = VAL(X$)
  1293.       IF X < 1 OR X > 3 THEN _
  1294.          GOTO 61310
  1295.       ON X GOTO 61320,61330,61340
  1296. 61320 CALL ASKRO ("New BEGINNING COLUMN",24,HJ$)
  1297.       IF HJ$ = "" THEN _
  1298.          GOTO 61320
  1299.       X = VAL(HJ$)
  1300.       IF X < 0 OR X > 128 THEN _
  1301.          GOTO 61320
  1302.       BEGIN.COL = X
  1303.       GOTO 61300
  1304. 61330 CALL ASKRO ("New # CHARACTERS to use",24,HJ$)
  1305.       IF HJ$ = "" THEN _
  1306.          GOTO 61330
  1307.       X = VAL(HJ$)
  1308.       IF X < 0 OR X > 31 THEN _
  1309.          GOTO 61330
  1310.       FIELD.LEN = X
  1311.       GOTO 61300
  1312. 61340 CALL ASKRO ("New PROMPT",24,HJ$)
  1313.       IF LEN(HJ$) > 34 THEN _
  1314.          GOTO 61340
  1315.       PRMPT$ = HJ$
  1316.       GOTO 61300
  1317.       END SUB
  1318. '  $SUBTITLE: 'ANYNUMBER - input any numeric value'
  1319. '  $PAGE
  1320. '
  1321. '  SUBROUTINE NAME    --  ANYNUMBER
  1322. '
  1323. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1324. '                         PRMPT$           Prompt
  1325. '
  1326. '  OUTPUT PARAMETERS  --  RETURNED.VALUE!  Value returned
  1327. '
  1328. '  SUBROUTINE PURPOSE --  To get a numeric value
  1329. '
  1330.       SUB ANYNUMBER (PRMPT$,RETURNED.VALUE!) STATIC
  1331. 61400 CALL ASKRO (PRMPT$,24,HJ$)
  1332.       RETURNED.VALUE! = VAL(HJ$)
  1333.       END SUB
  1334. '  $SUBTITLE: 'ANYINTEGER - input any integer value'
  1335. '  $PAGE
  1336. '
  1337. '  SUBROUTINE NAME    --  ANYINTEGER
  1338. '
  1339. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1340. '                         PRMPT$           Prompt
  1341. '
  1342. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   Value returned
  1343. '
  1344. '  SUBROUTINE PURPOSE --  To get an integer value
  1345. '
  1346.       SUB ANYINTEGER (PRMPT$,RETURNED.VALUE) STATIC
  1347. 61450 CALL ANYNUMBER (PRMPT$,RETURNED.VALUE!)
  1348.       IF RETURNED.VALUE! > 32000.0 OR RETURNED.VALUE! < -32000.0 THEN_
  1349.          BEEP : _
  1350.          GOTO 61450
  1351.       RETURNED.VALUE = RETURNED.VALUE!
  1352.       END SUB
  1353. '  $SUBTITLE: 'MMINTEGER - input any integer value with range check'
  1354. '  $PAGE
  1355. '
  1356. '  SUBROUTINE NAME    --  MMINTEGER
  1357. '
  1358. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1359. '                         PRMPT$           Prompt
  1360. '                         MIN              Minmum value inclusive
  1361. '                         MAX              Maximum value inclusive
  1362. '
  1363. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   Value returned
  1364. '
  1365. '  SUBROUTINE PURPOSE --  To get an integer value within a range
  1366. '
  1367.       SUB MMINTEGER (PRMPT$,MIN,MAX,RETURNED.VALUE) STATIC
  1368. 61500 CALL ANYINTEGER (PRMPT$,RETURNED.VALUE)
  1369.       IF RETURNED.VALUE < MIN OR RETURNED.VALUE > MAX THEN _
  1370.          BEEP : _
  1371.          GOTO 61500
  1372.       END SUB
  1373. '  $SUBTITLE: 'FINDFILE - Determine whether a file exists'
  1374. '  $PAGE
  1375. '
  1376. '  SUBROUTINE NAME    --  FINDFILE
  1377. '
  1378. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1379. '                         FILNAME$         File to look for
  1380. '                         FEXISTS          Whether file exists
  1381. '
  1382. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   Value returned
  1383. '
  1384. '  SUBROUTINE PURPOSE --  Determine whether passed file FILNAME$ exists
  1385. '                         Return true or false in FEXISTS
  1386. '
  1387.       SUB FINDFILE (FILNAME$,FEXISTS) STATIC
  1388. 61600 CALL RBBSFIND (FILNAME$,Z,Y,M,D)
  1389.       FEXISTS = (Z = 0)
  1390.       END SUB
  1391. '  $SUBTITLE: 'CHKFMSDIR - Validate structure of FMS directory'
  1392. '  $PAGE
  1393. '
  1394. '  SUBROUTINE NAME    --  CHKFMSDIR
  1395. '
  1396. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1397. '                         FMSDIR$         Name of FMS Directory
  1398. '                         LINELEN         Proper length of Lines
  1399. '                                         (excluding CR/LF at end)
  1400. '                         FMS.DIRCAT$     Category file for FMS
  1401. '
  1402. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   Value returned
  1403. '
  1404. '  SUBROUTINE PURPOSE --  Determine whether passed file FILNAME$ exists
  1405. '                         Return true or false in FEXISTS
  1406. '
  1407. 61700 SUB CHKFMSDIR (FMSDIR$,LINELEN,FMS.DIRCAT$) STATIC
  1408.       DIM CAT.CODE$(99)
  1409.       CLS
  1410.       LOCATE 5,20
  1411.       PRINT "Checking FMS file ";FMSDIR$;
  1412.       NLINES = 0
  1413.       LOCATE 7,27
  1414.       PRINT "Line #";
  1415.       LOCATE 9,20
  1416.       COLOR 0,7
  1417.       PRINT " Last Line with an ERROR ";
  1418.       LOCATE 12,28
  1419.       PRINT " Last ERROR ";
  1420.       COLOR 7,0
  1421.       NCATS = 0
  1422.       CALL FINDFILE (FMS.DIRCAT$,FEXISTS)
  1423.       IF FEXISTS THEN _
  1424.          NCATS = 1:_
  1425.          CAT.CODE$(1) = "***":_
  1426.          OPEN FMS.DIRCAT$ FOR INPUT AS #2 : _
  1427.          WHILE NOT EOF(2) AND NCATS < UBOUND(CAT.CODE$) :_
  1428.            NCATS = NCATS + 1:_
  1429.            INPUT #2,X$,Y$,X$:_
  1430.            CAT.CODE$(NCATS)= Y$:_
  1431.          WEND:_
  1432.          CLOSE 2
  1433.       GO.ON = -1
  1434.       CALL FINDFILE (FMSDIR$,FEXISTS)
  1435.       IF NOT FEXISTS THEN _
  1436.          LOCATE 6,25 : _
  1437.          PRINT "File not found"; : _
  1438.          GOTO 61750
  1439.       OPEN FMSDIR$ FOR INPUT AS #2
  1440.       WHILE NOT EOF(2) AND GO.ON
  1441.          NLINES = NLINES + 1
  1442.          LINE INPUT #2, A$
  1443.          L = LEN(A$)
  1444.          LOCATE 7,36
  1445.          PRINT NLINES;
  1446.          IF L > LINELEN THEN _
  1447.         CALL HANDERR (A$,NLINES,"Too LONG: has"+STR$(L)+" chars but should have"+STR$(LINELEN),GO.ON):_
  1448.         IF NOT GO.ON THEN 61740
  1449.      IF L < LINELEN THEN _
  1450.         CALL HANDERR (A$,NLINES,"Too SHORT: has"+STR$(L)+" chars but should have"+STR$(LINELEN),GO.ON):_
  1451.         IF NOT GO.ON THEN 61740
  1452.      IF L > 30 THEN _
  1453.         X$ = MID$(A$,24,2)+MID$(A$,27,2)+MID$(A$,30,2) : _
  1454.         I = 1 : _
  1455.         WHILE I < 7 AND INSTR("0123456789",MID$(X$,I,1))>0 : _
  1456.            I = I+1: _
  1457.         WEND: _
  1458.         IF I < 7 THEN _
  1459.            CALL HANDERR (A$,NLINES,"INVALID CHARACTER <"+MID$(X$,I,1)+"> in date field",GO.ON) : _
  1460.            IF NOT GO.ON THEN 61740
  1461.      I = 1
  1462.      Y$ = MID$(A$,L-2)
  1463.      CALL REMOVE (Y$," ")
  1464.      WHILE I <= NCATS AND Y$ <> CAT.CODE$(I)
  1465.         I = I+1
  1466.      WEND
  1467.      IF I > NCATS THEN _
  1468.         CALL HANDERR (A$,NLINES,"Category code <"+Y$+"> NOT IN "+FMS.DIRCAT$,GO.ON)
  1469. 61740 WEND
  1470. 61750 CLOSE 2
  1471.       IF GO.ON THEN _
  1472.      LOCATE 15,15:_
  1473.          BEEP:_
  1474.      CALL ASKRO ("           Done checking.  Press [ENTER] to continue",20,ANS$)
  1475.       END SUB
  1476.       SUB HANDERR (ERRLINE$,ERRL,ERRMES$,GO.ON) STATIC
  1477.       LOCATE 10,1
  1478.       PRINT SPACE$(80);
  1479.       LOCATE 10,1
  1480.       PRINT ERRLINE$;
  1481.       LOCATE  9,45
  1482.       PRINT STR$(ERRL);
  1483.       LOCATE 13,1
  1484.       PRINT SPACE$(79);
  1485.       L = LEN(ERRMES$)
  1486.       IF L > 68 THEN _
  1487.      STRT = 1_
  1488.       ELSE _
  1489.      STRT = (70-L)/2
  1490.       LOCATE 13,STRT
  1491.       PRINT ERRMES$;
  1492.       CALL ASKRO ("               CONTINUE checking (Y/N,[ENTER]=Y) ",20,ANS$)
  1493.       IF ANS$ = "" THEN ANS$ = "Y"
  1494.       CALL ALLCAPS (ANS$)
  1495.       GO.ON = FNYESNO (ANS$)
  1496.       END SUB
  1497. ' $SUBTITLE: 'REMOVE - subroutine to delete a string from within a string'
  1498. ' $PAGE
  1499. '
  1500. '  SUBROUTINE NAME    -- REMOVE
  1501. '
  1502. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  1503. '                        BADSTRING$              STRING CONTAINING CHARACTERS
  1504. '                                                TO BE DELETED FROM "L$"
  1505. '                        L$                      STRING TO BE ALTERED
  1506. '
  1507. '  OUTPUT PARAMETERS  -- L$                      WITH THE CHARACTERS IN
  1508. '                                                "BADSTRING#" DELETED FROM IT
  1509. '
  1510. '  SUBROUTINE PURPOSE -- TO REMOVE ALL INSTANCES OF THE CHARACTERS IN
  1511. '                        "BADSTRING$" FROM "L$"
  1512. '
  1513.       SUB REMOVE (L$,BADSTRNG$) STATIC
  1514. 61800 J = 0
  1515.       FOR I=1 TO LEN(L$)
  1516.          IF INSTR(BADSTRNG$,MID$(L$,I,1)) = 0 THEN_
  1517.             J = J+1:_
  1518.             MID$(L$,J,1) = MID$(L$,I,1)
  1519.       NEXT I
  1520.       L$ = LEFT$(L$,J)
  1521.       END SUB
  1522.